package com.example;

import java.util.Scanner;

/**
 * 案例三：评委打分
 */
public class Test3 {
    public static void main(String[] args) {
        /*
        评委打分案例
        需求:在唱歌比赛中,可能有多名评委要给选手打分,分数是[0-100]之间的整数
        选手最后得分为:去掉最高分,最低分后剩余分数的平均分,请编写程序能够录入多名评委的分数,并算出选手的最终得分
         */
        System.out.println("当前选手得分是：" + getAverageScore(6));
    }

    /**
     * 根据评委的人数计算平均分
     *
     * @param n 评委的人数
     * @return 选手最终的得分
     */
    public static double getAverageScore(int n) {
        Scanner sc = new Scanner(System.in);
        // 1.定义一个数组,负责存储评委打分 使用动态初始化数组,先确定数组的长度,后面在进行赋值
        int[] scores = new int[n];

        // 2.遍历数组,录入评委打分
        for (int i = 0; i < n; i++) {
            System.out.print("请输入第" + (i + 1) + "位评委打分: ");
            scores[i] = sc.nextInt();
        }

        // 3.假设最大值和最小值都是第一个元素
        int max = scores[0];
        int min = scores[0];
        int sum = 0; // 存储所有元素的总和

        // 4.遍历数组,找到最大值和最小值,并计算所有元素的总和
        for (int i = 0; i < scores.length; i++) {
            // 判断是否是最大值
            if (scores[i] > max) {
                max = scores[i];
            }
            // 判断是否是最小值
            if (scores[i] < min) {
                min = scores[i];
            }
            // 计算所有元素的总和
            sum += scores[i];
        }

        // 5.计算平均分返回
        return (1.0) * (sum - max - min) / (n - 2);
    }
}
